"""

我们前面讲过，断言的常见几种方式：
* 比较相等： assert a == b
* 比较大小（大于/小于/大于等于/小于等于）： assert a > b
* 内容包含/内容不包含：assert a in b
* 验证表达式是否为真： assert condition

所以这个断言封装里最好包含这些所有的情况：
* 这里单独封装了3个函数，如果后面还有其他的断言方法 可以再丰富进去。
* 在每个函数里加上日志 + 异常捕获

可以在这个模块里写多个函数  好处在于不用实例化。
- 如果只有方法  没有属性  写成类的方式必要性没有那么强。
- 分开写成多个函数 更加简单一些
"""
import time

import allure
from loguru import logger


# 第一个断言函数：比较相等： assert a == b ,断言实际结果和预期结果相等
from common.handle_path import screenshot_path


def assert_equal(driver,actual,expected): # 这里截图需要一个driver 所以参数化 用例里传参
    logger.info("------------断言开始-------------")
    try:
        assert actual == expected
        logger.info(f"断言成功，预期结果是：{expected}，实际结果是：{actual}")
    except AssertionError as e:
        logger.error(f"断言失败，预期结果是：{expected}，实际结果是：{actual}")
        # driver.save_screenshot(rf"{screenshot_path}\screenshot_{int(time.time() * 1000)}.png")
        allure.attach(driver.get_screenshot_as_png(), name="失败用例截图", attachment_type=allure.attachment_type.PNG)
        raise e

# 第二个断言函数： 内容包含/内容不包含：assert a in b
def assert_in(driver,str1,str2):
    logger.info("------------断言开始-------------")
    try:
        assert str1 in str2
        logger.info(f"断言成功，{str1}在{str2}里面的")
    except AssertionError as e:
        logger.error(f"断言失败，{str1}不在{str2}里面的")
        # driver.save_screenshot(rf"{screenshot_path}\screenshot_{int(time.time() * 1000)}.png")
        allure.attach(driver.get_screenshot_as_png(), name="失败用例截图", attachment_type=allure.attachment_type.PNG)
        raise e

# 第二三个断言函数： 验证表达式是否为真： assert condition
def assert_condition(driver,condition):
    logger.info("------------断言开始-------------")
    try:
        assert condition
        logger.info(f"断言成功，{condition}成立的！")
    except AssertionError as e:
        logger.error(f"断言失败，{condition}不成立的！")
        # driver.save_screenshot(rf"{screenshot_path}\screenshot_{int(time.time() * 1000)}.png")
        allure.attach(driver.get_screenshot_as_png(), name="失败用例截图", attachment_type=allure.attachment_type.PNG)
        raise e

# 如果后面的用例还用到了其他的断言的方法 可以在这个模块里添加和补充。
